home *** CD-ROM | disk | FTP | other *** search
- #ifndef _COMPIZ_ANIMATIONADDON_H
- #define _COMPIZ_ANIMATIONADDON_H
-
- #define ANIMATIONADDON_ABIVERSION 20081023
-
-
- // Polygon tesselation type: Rectangular, Hexagonal
- typedef enum
- {
- PolygonTessRect = 0,
- PolygonTessHex,
- PolygonTessGlass
- } PolygonTess;
- #define LAST_POLYGON_TESS 2
-
- // This is intended to be a closed 3D piece of a window with convex polygon
- // faces and quad-strip sides. Since decoration texture is separate from
- // the window texture, it is more complicated than it would be with a single
- // texture: we use glClipPlane with the rectangles (clips) to clip 3D space
- // to the region falling within that clip.
- // If the polygon is on an edge/corner, it also has 2D shadow quad(s)
- // (to be faded out at the beginning of 3D animation if necessary).
- typedef struct _PolygonObject
- {
- int nVertices; // number of total vertices (front + back)
- int nSides; // number of sides
- GLfloat *vertices; // Positions of vertices relative to center
- GLushort *sideIndices; // Indices of quad strip for "sides"
- GLfloat *normals; // Surface normals for 2+nSides faces
-
- Box boundingBox; // Bound. box to test intersection with clips
-
- // Animation effect parameters
-
- Point3d centerPosStart; // Starting position of center
- float rotAngleStart; // Starting rotation angle
-
- Point3d centerPos; // Position of center
- Vector3d rotAxis; // Rotation axis vector
- float rotAngle; // Rotation angle
- Point3d rotAxisOffset; // Rotation axis translate amount
-
- Point centerRelPos; // Relative pos of center within the window
-
- Vector3d finalRelPos; // Velocity factor for scripted movement
- float finalRotAng; // Final rotation angle around rotAxis
-
- float moveStartTime; // Movement starts at this time ([0-1] range)
- float moveDuration; // Movement lasts this long ([0-1] range)
-
- float fadeStartTime; // Fade out starts at this time ([0,1] range)
- float fadeDuration; // Duration of fade out ([0,1] range)
-
- void *effectParameters; /* Pointer to a struct that can contain
- custom parameters for an individual effect */
-
- float boundSphereRadius; // Radius of bounding sphere
- } PolygonObject;
-
- typedef struct _Clip4Polygons // Rectangular clips
- { // (to hold clips passed to AddWindowGeometry)
- int id; // clip id (what number this clip is among
- // passed clips)
- Box box; // Coords
- Boxf boxf; // Float coords (for small clipping adjustment)
- CompMatrix texMatrix; // Corresponding texture coord. matrix
- int *intersectingPolygons;
- int nIntersectingPolygons; // Clips (in PolygonSet) that intersect
- GLfloat *polygonVertexTexCoords;
- // Tex coords for each intersecting polygon and for each vertex
- // ordered as p1.v1.x, p1.v1.y, p1.v2.x, p1.v2.y, p2.v1.x, p2.v1.y, ...
- } Clip4Polygons;
-
- typedef enum
- {
- CorrectPerspectiveNone = 0,
- CorrectPerspectivePolygon,
- CorrectPerspectiveWindow
- } CorrectPerspective;
-
- typedef struct _PolygonSet // Polygon objects with same thickness
- {
- int nClips; // Rect. clips collected in AddWindowGeometries
- Clip4Polygons *clips; // List of clips
- int clipCapacity; // # of clips this list can hold
- int firstNondrawnClip;
- int *lastClipInGroup; // index of the last clip in each group of clips
- // drawn in drawGeometry func.
-
- Bool doDepthTest; // whether depth testing should be used in the effect
- Bool doLighting; // whether lighting should be used in the effect
- CorrectPerspective correctPerspective;
- PolygonObject *polygons; // The polygons in this set
- int nPolygons;
- float thickness; // Window thickness (depth along z axis)
- int nTotalFrontVertices; // Total # of polygon vertices on front faces
- float backAndSidesFadeDur; // How long side and back faces should fade in/out
- float allFadeDuration; /* Duration of fade out at the end in [0,1] range
- when all polygons fade out at the same time.
- If >-1, this overrides fadeDuration in PolygonObject */
-
- Bool includeShadows; // include shadows in polygon
-
- void (*extraPolygonTransformFunc) (PolygonObject *);
- } PolygonSet;
-
- typedef struct _Particle
- {
- float life; // particle life
- float fade; // fade speed
- float width; // particle width
- float height; // particle height
- float w_mod; // particle size modification during life
- float h_mod; // particle size modification during life
- float r; // red value
- float g; // green value
- float b; // blue value
- float a; // alpha value
- float x; // X position
- float y; // Y position
- float z; // Z position
- float xi; // X direction
- float yi; // Y direction
- float zi; // Z direction
- float xg; // X gravity
- float yg; // Y gravity
- float zg; // Z gravity
- float xo; // orginal X position
- float yo; // orginal Y position
- float zo; // orginal Z position
- } Particle;
-
- typedef struct _ParticleSystem
- {
- int numParticles;
- Particle *particles;
- float slowdown;
- GLuint tex;
- Bool active;
- int x, y;
- float darken;
- GLuint blendMode;
-
- // Moved from drawParticles to get rid of spurious malloc's
- GLfloat *vertices_cache;
- int vertex_cache_count;
- GLfloat *coords_cache;
- int coords_cache_count;
- GLfloat *colors_cache;
- int color_cache_count;
- GLfloat *dcolors_cache;
- int dcolors_cache_count;
- } ParticleSystem;
-
- // Window properties for particle or polygon based animation effects
- typedef struct _AnimWindowEngineData
- {
- // for polygon engine
- PolygonSet *polygonSet;
-
- // for particle engine
- int numPs;
- ParticleSystem *ps;
- } AnimWindowEngineData;
-
-
- typedef Bool
- (*tessellateProc) (CompWindow * w,
- int gridSizeX,
- int gridSizeY,
- float thickness);
-
- // Animaddon plugin functions for extension plugins to call
- // (only for plugins with effects that use polygon or particle engines).
- typedef struct _AnimAddonFunctions {
- AnimWindowEngineData * (*getAnimWindowEngineData) (CompWindow *w);
- int (*getIntenseTimeStep) (CompScreen *s);
-
- // Particle engine functions
- void (*initParticles) (int numParticles,
- ParticleSystem * ps);
- void (*finiParticles) (ParticleSystem * ps);
- void (*drawParticleSystems) (CompWindow *w);
- UpdateBBProc particlesUpdateBB;
- void (*particlesCleanup) (CompWindow * w);
- Bool (*particlesPrePrepPaintScreen) (CompWindow * w,
- int msSinceLastPaint);
-
- // Polygon engine functions
- Bool (*polygonsAnimInit) (CompWindow * w);
- void (*polygonsAnimStep) (CompWindow * w, float time);
- void (*polygonsPrePaintWindow) (CompWindow * w);
- void (*polygonsPostPaintWindow) (CompWindow * w);
- void (*polygonsStoreClips) (CompWindow * w,
- int nClip, BoxPtr pClip,
- int nMatrix, CompMatrix * matrix);
- void (*polygonsDrawCustomGeometry) (CompWindow * w);
- UpdateBBProc polygonsUpdateBB;
- Bool (*polygonsPrePreparePaintScreen) (CompWindow *w,
- int msSinceLastPaint);
- void (*polygonsCleanup) (CompWindow *w);
- void (*polygonsRefresh) (CompWindow *w,
- Bool animInitialized);
- void (*polygonsDeceleratingAnimStepPolygon) (CompWindow * w,
- PolygonObject *p,
- float forwardProgress);
- void (*freePolygonObjects) (PolygonSet * pset);
- tessellateProc tessellateIntoRectangles;
- tessellateProc tessellateIntoHexagons;
- tessellateProc tessellateIntoGlass;
- } AnimAddonFunctions;
-
- typedef void (*AnimStepPolygonProc) (CompWindow *w,
- PolygonObject *p,
- float forwardProgress);
-
- typedef struct _AnimAddonEffectProperties
- {
- AnimStepPolygonProc animStepPolygonFunc;
- } AnimAddonEffectProperties;
-
- #endif
-
-